(function () {
  // 定义一个人类  
  class People {
    name: string
    age: number
    constructor(name: string, age: number) {
      this.name = name
      this.age = age
    }

    sayHello() {
      console.log('人类')
    }
  }

  // 使Person 继承 People 
  /**
   * ---此时 People被称为父类  Person被称为子类
   * ---使用继承后,子类会拥有父类中所有的方法和属性
   * ---通过继承,可以将多个类中共有的代码写在一个父类中
   *      这样只需要写一次,就可以让所有子类都同时拥有父类中的属性和方法
   *      如果希望在子类中添加一些父类没有的属性或者方法
   * ---如果在子类中添加了和父类相同的方法,则子类会覆盖父类的方法
   *      这种子类覆盖掉父类方法的形式,我们叫做方法的重写
   */
  class Person extends People {
    sayHello() {
      console.log('瓜麻批')
    }
    eat() {
      console.log(`${this.name}要干饭`)
    }
  }

  // personSon 继承 people类
  class personSon extends People {
    sayHello() {
      console.log('呜呜呜')
    }
  }

  const w = new Person('小王', 18)
  const son = new personSon('小王子', 3)
  console.log(w)
  console.log(son)
  w.sayHello()
  w.eat()
  son.sayHello()
})()
